import {defineConfig} from 'vite';
import vue from '@vitejs/plugin-vue';
import viteRequireTransform from 'vite-plugin-require-transform';
import {createSvgIconsPlugin} from 'vite-plugin-svg-icons';
import AutoImport from 'unplugin-auto-import/vite';
import path from 'path';

// https://vitejs.dev/config/
export default defineConfig({
  base: '/ferret',
  plugins: [
    vue(),
    viteRequireTransform({
      fileRegex: /.js$|.vue$|.ts$/
    }),
    createSvgIconsPlugin({
      iconDirs: [path.resolve(__dirname, './src/assets/icon')],
      symbolId: 'fx-icon-[dir]-[name]'
    }),
    AutoImport({
      imports: ['vue', 'vue-router'], // 自动导入的依赖库数组
      dts: './auto-imports.d.ts', // 自动导入类型定义文件路径
    })
  ],
  server: {
    port: 8505,
    host: '0.0.0.0',
    proxy: {
      '/api': {
        target: 'http://127.0.0.1:8600/single',  // 目标服务器地址
        changeOrigin: true,  //是否改变源地址
        rewrite: path => {
          // 重写要代理到远程服务器的path
          return path.replace(/^\/api\/login/, '/oauth2/token')
            .replace(/^\/api/, '/api');
        }
      }
    }
  },
  build: {
    // 混淆器，terser 构建后文件体积更小，‘terser’ | ‘esbuild’
    minify: 'terser',
    rollupOptions: {
      output: {
        // 用于从入口点创建的块的打包输出格式[name]表示文件名,[hash]表示该文件内容hash值
        entryFileNames: 'static/js/[name]-[hash].js',
        // 用于命名代码拆分时创建的共享块的输出命名
        chunkFileNames: 'static/js/[name]-[hash].js',
        // 用于输出静态资源的命名，[ext]表示文件扩展名
        assetFileNames: 'static/assets/[ext]/[name]-[hash].[ext]',
        // 最小化拆分包
        manualChunks: (id) => {
          if (id.includes('node_modules')) {
            return id.toString().split('node_modules/')[1].split('/')[0].toString();
          }
        }
      }
    }
  },
  resolve: {
    alias: {
      '@': path.resolve(__dirname, './src')
    }
  },
  terserOptions: {
    // 生产环境移除console打印
    compress: {
      drop_console: true,
      drop_debugger: true,
    },
    // 去掉注释内容
    output: {
      comments: true,
    },
  }
});
